#ifndef FHE_CORE_ISERIALIZER_H
#define FHE_CORE_ISERIALIZER_H

#include <fhe/core/Val.h>
#include <fhe/core/Data.h>

namespace fhe
{
  namespace core
  {
    class ISerializer : public boost::noncopyable
    {
    public:
      typedef boost::shared_ptr< ISerializer > Ptr;
      virtual std::string name() const = 0;
      virtual const std::type_info& type() const = 0;
      virtual void serialize( const Data::Ptr& data, const Val& val ) const = 0;
      virtual Val deserialize( const Data::Ptr& data ) const = 0;
    };
  }
}

#endif
